#include <stdio.h>
#include <stdlib.h>

FILE *file_open(const char *path, const char *mode);
int file_close(FILE **fp);

/*
long ftell(FILE *stream);
函数名:ftell
参数
    stream 文件指针
返回值
    当前光标的位置
功能
    获取当前光标位置

*/
/*
练习1:写一个函数 在终端打印这个文件有多少行 每一行中的字符数是多少
*/

void file_test(const char *path)
{
    FILE * fp = file_open(path , "r+");
    // 检测文件行数
    int i = 0;
    int ch = 0;
    while(EOF != (ch = fgetc(fp)))
    {
        if ('\n' == ch)
        {
            i++;
        }
    }
    printf("文件有 %d 行\n" , i);

    
    // 回到文件头
    fseek( fp , 0 , SEEK_SET );

    i = 0;
    
    for (size_t j = 0; EOF != (ch = fgetc(fp)) ; j++)
    {
        i++;
        if (ch == '\n')
        {
            printf("有 %d 个字符\n" , i - 1 );
            i = 0;
        }
    }
    
    

    file_close(&fp);
}

int main(int argc, char const *argv[])
{
    file_test("hello.txt");
    return 0;
}




FILE *file_open(const char *path, const char *mode)
{
    FILE *fp = fopen(path, mode);
    if (NULL == fp)
    {
        printf("文件创建失败\n");
        exit(-1);    // 退出整个程序
    }
    return fp;
}

int file_close(FILE **fp)
{
    fclose(*fp);
    *fp = NULL;
}
